/*
 * SPDX-FileCopyrightText: 2020-2021 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include "esp_memprot_err.h"
#include "hal/memprot_types.h"
#include "esp_memprot_types.h"

esp_err_t esp_mprot_ll_err_to_esp_err(const memprot_hal_err_t err) {
    switch (err) {
        case MEMP_HAL_OK:
            return ESP_OK;
        case MEMP_HAL_ERR_SPLIT_ADDR_OUT_OF_RANGE:
            return ESP_ERR_MEMPROT_SPLIT_ADDR_OUT_OF_RANGE;
        case MEMP_HAL_ERR_SPLIT_ADDR_UNALIGNED:
            return ESP_ERR_MEMPROT_SPLIT_ADDR_UNALIGNED;
        case MEMP_HAL_ERR_UNI_BLOCK_INVALID:
            return ESP_ERR_MEMPROT_UNIMGMT_BLOCK_INVALID;
        case MEMP_HAL_ERR_WORLD_INVALID:
            return ESP_ERR_MEMPROT_WORLD_INVALID;
        case MEMP_HAL_ERR_AREA_INVALID:
            return ESP_ERR_MEMPROT_AREA_INVALID;
        default:
            return ESP_FAIL;
    }
}

esp_mprot_pms_world_t esp_mprot_ll_world_to_hl_world(const memprot_hal_world_t world) {
    switch (world) {
        case MEMP_HAL_WORLD_NONE:
            return MEMPROT_PMS_WORLD_NONE;
        case MEMP_HAL_WORLD_0:
            return MEMPROT_PMS_WORLD_0;
        case MEMP_HAL_WORLD_1:
            return MEMPROT_PMS_WORLD_1;
        default:
            return MEMPROT_PMS_WORLD_INVALID;
    }
}

const char *esp_mprot_oper_type_to_str(const uint32_t oper_type) {
    switch (oper_type) {
        case MEMPROT_OP_NONE:
            return "NONE";
        case MEMPROT_OP_READ:
            return "READ";
        case MEMPROT_OP_WRITE:
            return "WRITE";
        case MEMPROT_OP_EXEC:
            return "EXEC";
        default:
            return "INVALID";
    }
}

const char *esp_mprot_pms_world_to_str(const esp_mprot_pms_world_t world_type) {
    switch (world_type) {
        case MEMPROT_PMS_WORLD_NONE:
            return "PMS_WORLD_NONE";
        case MEMPROT_PMS_WORLD_0:
            return "PMS_WORLD_0";
        case MEMPROT_PMS_WORLD_1:
            return "PMS_WORLD_1";
        case MEMPROT_PMS_WORLD_2:
            return "PMS_WORLD_2";
        case MEMPROT_PMS_WORLD_ALL:
            return "PMS_WORLD_ALL";
        default:
            return "PMS_WORLD_INVALID";
    }
}
